package com.icinfo.cloud.provider.punish.evideinv.service;

import com.icinfo.cloud.common.core.page.PageResponse;
import com.icinfo.cloud.provider.common.dto.EvidenceInfo;
import com.icinfo.cloud.provider.punish.api.dto.DeptInfoSyncDto;
import com.icinfo.cloud.provider.punish.api.dto.LawEnforcerDto;
import com.icinfo.cloud.provider.punish.evideinv.dto.*;
import com.icinfo.cloud.provider.punish.evideinv.vo.EvidenceNewSignVo;
import com.icinfo.cloud.provider.punish.evideinv.vo.EvidencePageNewVo;
import com.icinfo.cloud.provider.punish.execute.dto.ExecuteEventSaveDto;
import com.icinfo.cloud.provider.punish.ucase.punishinform.vo.CaseCriminalTransferFileVo;

import java.util.List;
import java.util.Map;

/**
 * 证据库新对接
 *
 * @author Administrator
 */
public interface EvidenceInventoryService {

    /**
     * 获得签名
     * @return
     */
    EvidenceNewSignVo getSign();

    /**
     * 分页查询证据库
     * @param pageDto
     * @return
     */
    PageResponse<EvidencePageNewVo> getEvidencePage(QueryEvidencePageDto pageDto);

    /**
     * 删除 案件所有草稿
     * @param caseId
     * @return
     */
    Boolean removeAllDraft(String caseId);

    /**
     * 删除 单个草稿
     * @param dto
     * @return
     */
    Boolean removeDraftByUid(EvidenceDetailQueryDto dto);


    /**
     * 案件信息推送到证据库
     * @param caseId
     * @param caseNo
     * @return
     */
    Boolean saveEvent(String caseId, String caseNo);

    /**
     * 删除案件
     * @param caseId
     * @return
     */
    Boolean removeEvent(String caseId);

    /**
     *  获得按钮链接接口
     * @param dto
     * @return
     */
    String getButtonUrl(EvidenceButtonUrlQueryDto dto);

    /**
     * 更新案件环节
     * @param caseId
     * @return
     */
    Boolean updateCaseNode(String caseId);

    /**
     *
     * 保存鉴定意见文书(鉴定意见告知书、送达回证)
     * 定时任务扫描
     * @param
     * @return
     */
    Boolean saveAppraisalDoc();

    /**
     * 保存案件相关过程文书
     * @param caseId
     * @param documentCatalogCode
     * @return
     */
   Boolean saveCaseProcessDocument(String caseId,String documentCatalogCode);

    /**
     * 保存案件结果
     * @param caseId
     * @return
     */
   Boolean saveCaseResultInfo(String caseId);

    /**
     * 删除 单个证据
     * @param dto
     * @return
     */
    Boolean removeEvidenceByUid(EvidenceDetailQueryDto dto);

    /**
     * 更新案件 当事人信息
     * @param caseId
     * @return
     */
    Boolean updateCpInfo(String caseId);
    /**
     *  重新推送案件信息到证据库
     * @author liyafeng
     * @date 2022/7/11
      * @param dto
     * @return {@link boolean}
     */
    boolean reSaveEvent(EventReSaveDto dto);

    /**
     *
     * @param dto
     * @return
     */
    boolean saveCaseSourceEvent(CaseSourceEventSaveDto dto);
    /**
     * 【V1.3.2】描述：向证据库同步部门信息变更信息
     * 办案系统部门信息变化的时调用接口，更新相关数据
     *
     * @param deptInfoSyncDto 部门信息同步dto
     * @return {@link String }
     * @author shishengyao
     * @date 2022/07/20
     */
    Map<String,Object> syncDeptInfoToEvidenceShare(DeptInfoSyncDto deptInfoSyncDto);

    /**
     * 描述： 更新执法人员签名
     *
     * @author: zhengqiang
     * @date: 2022/8/5
     * @param: lawEnforcerDto
     * @return {@link boolean}
     **/
    boolean updateLawEnforcer(LawEnforcerDto lawEnforcerDto);

    /**
     * 描述: 裁执分离证据库新增事件
     *
     * @param dto
     * @return boolean
     * @author zhanghongqiang
     * @Date 2022/9/5
     */
    boolean saveExecuteEvent(ExecuteEventSaveDto dto);

    /**
     * 描述： 根据证据uid和linkType获取预览地址
     *
     * @author: zhengqiang
     * @date: 2022/8/24
     * @param: evidenceUid
     * @param: linkType
     * @return {@link String}
     **/
    String getEvidenceLink(String evidenceUid, String linkType);

    /**
     * 描述：获取证据详情
     *
     * @param caseId 用例id
     * @return {@link List<CaseCriminalTransferFileVo> }
     * @author shishengyao
     * @date 2022/10/11
     */
    List<Map>  getEvidenceDetailList(String caseId);

    /**
     * 【AJ-V1.1.1】描述： 根据案件id删除证据
     *
     * @author: zhengqiang
     * @date: 2023/3/9
     * @param: caseId
     * @return {@link Boolean}
     **/
    Boolean deleteEvidenceByCaseId(String caseId);

    /**
     * 查询证据的列表数据
     *
     * @param caseId
     * @param filterFlag 是否需要过滤证据true：过滤  false：不过滤
     * @return
     */
    List<EvidenceInfo> getCaseEvidenceInfo(String caseId, Boolean filterFlag);

    /**
     * 查询证据和文书的数量
     *
     * @param caseId
     * @return
     */
    Integer getEvideceCountForCase(String caseId);


    boolean reSaveCaseSourceEvent(CaseSourceEventSaveDto dto);

    List<Map> getCaseEvidenceInfoList(String caseId);
}
